﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DataAccessLayer;
using BusinessLogicLayer;
using System.Globalization;

namespace ChamCong.Admin
{
    public partial class TongHopCong : BasePage
    {
        NhanVienBLL nvBLL = new NhanVienBLL();
        CongBLL cBLL = new CongBLL();
        TongCongThangBLL tctBLL = new TongCongThangBLL();
        TangCaBLL tcBLL = new TangCaBLL();
        ThamSoBLL tsBLL = new ThamSoBLL();
        GiaoViecBLL gvBLL = new GiaoViecBLL();

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                cBLL.KiemTraTinhCong(0);
            }
            catch{}
            if (!IsPostBack)
            {
                drThang.SelectedValue = DateTime.Now.Month.ToString();
                txtNam.Text = DateTime.Now.Year.ToString();
            }
        }

        protected void btnChotCong_Click(object sender, EventArgs e)
        {
            try
            {
                int _thang = int.Parse(drThang.SelectedValue);
                int _nam = int.Parse(txtNam.Text);
                int days = DateTime.DaysInMonth(_nam, _thang);
                //Kiểm tra đã chốt công chưa
                if (tctBLL.KiemTraTongCong(_thang, _nam) == false)
                {
                    //Nếu thời gian chốt công lớn hơn ngày cuối cùng của tháng
                    if (DateTime.Now > Convert.ToDateTime(_thang.ToString() + "/" + days.ToString() + "/" + _nam.ToString()))
                    {
                        List<NHANVIEN> lsnv = nvBLL.LayTatCa();

                        DateTime startDay = Convert.ToDateTime(_thang.ToString() + "/01/" + _nam.ToString());
                        DateTime endDay = Convert.ToDateTime(_thang.ToString() + "/" + days.ToString() + "/" + _nam.ToString());

                        //List<GIAOVIEC> lsgv = gvBLL.LayDSGiaoViecTheoThang(startDay, endDay);

                        foreach (var a in lsnv)
                        {
                            Double _tongcong = 0;
                            Double _tongtc = 0;

                            // Tinh Cong
                            for (int d = 1; d <= days; d++)
                            {
                                //Chot cong
                                DateTime thisday = Convert.ToDateTime(_thang.ToString() + "/" + d.ToString() + "/" + _nam.ToString());
                                if (cBLL.KiemTraTonTai(a.MaNV, thisday) == 1 || cBLL.KiemTraTonTai(a.MaNV, thisday) == 2)
                                {
                                    CONG c = new CONG();
                                    c.MaNV = a.MaNV;
                                    c.Ngay = thisday;
                                    c.TrangThaiChot = 1;
                                    cBLL.SuaTTChot(c);

                                    _tongcong += Convert.ToDouble(cBLL.LayCong(a.MaNV, thisday).SoCong);
                                }
                                else { }

                                //Chot Cong Tang Ca
                                if (tcBLL.KiemTraTonTai(thisday, a.MaNV) == true)
                                {
                                    TANGCA tc = new TANGCA();
                                    tc.Ngay = thisday;
                                    tc.MaNV = a.MaNV;
                                    tc.TrangThaiChot = 1;

                                    _tongtc += (Double)tcBLL.LayGioTC(thisday, a.MaNV);
                                }
                                else { }
                            }
                            //
                            TONGCONGTHANG tct = new TONGCONGTHANG();
                            tct.CongLamViec = _tongcong;
                            tct.GioTangCa = _tongtc;

                            //Tinh cong tang ca
                            float tgcong = float.Parse(tsBLL.LayGiaTri("TGCong"));
                            tct.CongTangCa = LamTron(_tongtc / tgcong, 2);
                            tct.TongCong = tct.CongLamViec + tct.CongTangCa;
                            tct.Thang = _thang;
                            tct.Nam = _nam;
                            tct.MaNV = a.MaNV;

                            List<GIAOVIEC> lsgv = gvBLL.LayDSGiaoViecTheoThang(startDay, endDay, a.MaNV);

                            float hieusuat = 0;
                            int sogv = 0;

                            if (lsgv.Count == 0)
                            {
                                tct.HieuSuatLamViec = 0;
                            }
                            else
                            {
                                foreach (var i in lsgv)
                                {
                                    if (i.KetQua != null)
                                    {
                                        hieusuat += (float)i.KetQua;
                                        sogv += 1;
                                    }
                                    else
                                    {

                                    }
                                }
                                if (sogv > 0)
                                {
                                    tct.HieuSuatLamViec = LamTron(hieusuat / sogv, 2);    
                                }
                                else
                                {
                                    tct.HieuSuatLamViec = 0;
                                }
                                
                            }
                            //Tính Hiệu Suất Làm việc

                            //Thêm Tổng Công tháng
                            tctBLL.Them(tct);




                        }
                        sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Chốt Công Thành Công!");
                        List<NHANVIEN2> nv = nvBLL.DSNhanVien2(0, "");
                        lbThongBao.Text = ShowChotCong(nv, _thang, _nam);
                    }
                    else
                    {
                        sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Chưa hết Tháng, Không thể chốt công!");
                    }
                }
                else
                {
                    sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Info, "Thông báo", "Công Đã Chốt!");
                    List<NHANVIEN2> nv = nvBLL.DSNhanVien2(0, "");
                    lbThongBao.Text += ShowChotCong(nv, _thang, _nam);
                }
            }
            catch (Exception ex)
            {
                sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", ex.Message);
            }
            imgPreLoaderCyclee.Visible = false;
        }

        protected double LamTron(double value, int fractionDigits)
        {
            double d = Math.Pow(10, fractionDigits);

            return (Math.Round(value * d) / d);
        }

        protected string ShowChotCong(List<NHANVIEN2> nv, int thang, int nam)
        {
            string _ls = "";
            _ls += "<table cellpadding='5' style='background-color:White;'>";
            _ls += "<tr align='center' style='font-weight:bold;' >";
            _ls += "<td>Họ Tên</td>" +
                   "<td>Công Làm Việc</td>" +
                   "<td>Công Tăng Ca</td>" +
                   "<td>Tổng Công</td>" +
                   "<td>Hiệu Suất (%)</td>";
            _ls += "</tr>";


            foreach (var a in nv)
            {
                _ls += "<tr>";
                _ls += "<td>" + a.HoTen.ToString() + "</td>";
                TONGCONGTHANG n = tctBLL.LayTongCong(a.MaNV, thang, nam);
                if (n == null)
                {
                    _ls += "<td align='center'>-</td>";
                    _ls += "<td align='center'>-</td>";
                    _ls += "<td align='center'>-</td>";
                    _ls += "<td align='center'>-</td>";
                }
                else
                {
                    _ls += "<td align='center'>" + n.CongLamViec.ToString() + "</td>";
                    _ls += "<td align='center'>" + n.CongTangCa.ToString() + "</td>";
                    _ls += "<td align='center'>" + n.TongCong.ToString() + "</td>";
                    _ls += "<td align='center'>" + n.HieuSuatLamViec.ToString() + "</td>";
                    //_ls += "<td></td>";
                    _ls += "</tr>";
                }
            }

            _ls += "</table>";
            return _ls;
        }

        protected void ChekCong(int _thang, int _nam)
        {
            int days = DateTime.DaysInMonth(_nam, _thang);
            IFormatProvider format = new CultureInfo("vi-VN");
            DateTime startDay = (DateTime)Convert.ToDateTime("1/" + _thang.ToString() + "/" + _nam.ToString(), format);
            DateTime endDay = (DateTime)Convert.ToDateTime(days.ToString() + "/" + _thang.ToString() + "/" + _nam.ToString(), format);

            List<CONG> lsCong = cBLL.LayDSCongPhep(startDay, endDay);
            foreach (var cong in lsCong)
            {
                //nếu mã công là nữa ngày -> 0 -> xóa
                if (cong.MaLoaiCong.ToString().Trim() == "N")
                {
                    //Xóa Công!
                    cBLL.XoaCong(cong.Ngay, cong.MaNV);
                }                
                //nếu mã công là cả ngày -> nữa -> sửa
                else if (cong.MaLoaiCong.ToString().Trim() == "1")
                {
                    CONG c = new CONG();
                    c.MaNV = cong.MaNV;
                    c.Ngay = cong.Ngay;
                    c.TrangThaiChot = cong.TrangThaiChot;
                    c.MaLoaiCong = "N";
                    c.SoCong = 0.5;
                    cBLL.SuaCong(c);
                }
                else { }

            }
        }
    }
}